import { Elysia, t } from 'elysia';
import {
  getUsers,
  getUser,
  createUser,
  updateUser,
  deleteUser,
  toggleUserStatus
} from '../controllers/userController';
import { guestAccessMiddleware } from '../middleware/auth';

export const userRoutes = new Elysia({ prefix: '/users' })
  // 所有用户管理接口需要登录权限（游客可查看，管理员可编辑）
  .use(guestAccessMiddleware())
  
  // 获取用户列表
  .get('/', getUsers, {
    detail: {
      tags: ['Users'],
      summary: '获取用户列表',
      description: '获取系统用户列表，支持分页、搜索和筛选'
    },
    query: t.Object({
      page: t.Optional(t.String({ description: '页码，默认为1' })),
      pageSize: t.Optional(t.String({ description: '每页数量，默认为10' })),
      keyword: t.Optional(t.String({ description: '搜索关键词，支持用户名、邮箱、姓名' })),
      role: t.Optional(t.String({ description: '角色筛选：admin, editor, user' })),
      status: t.Optional(t.String({ description: '状态筛选：active, inactive, locked' }))
    })
  })
  
  // 获取用户详情
  .get('/:id', getUser, {
    detail: {
      tags: ['Users'],
      summary: '获取用户详情',
      description: '根据用户ID获取用户详细信息'
    },
    params: t.Object({
      id: t.String({ description: '用户ID' })
    })
  })
  
  // 创建用户
  .post('/', createUser, {
    detail: {
      tags: ['Users'],
      summary: '创建用户',
      description: '创建新的系统用户'
    },
    body: t.Object({
      username: t.String({ description: '用户名' }),
      nickname: t.String({ description: '昵称' }),
      password: t.String({ description: '密码' }),
      role: t.Optional(t.String({ description: '用户角色：admin, guest，默认为guest' })),
      status: t.Optional(t.String({ description: '用户状态：active, inactive，默认为active' }))
    })
  })
  
  // 更新用户
  .put('/:id', updateUser, {
    detail: {
      tags: ['Users'],
      summary: '更新用户',
      description: '更新用户信息'
    },
    params: t.Object({
      id: t.String({ description: '用户ID' })
    }),
    body: t.Object({
      username: t.Optional(t.String({ description: '用户名' })),
      nickname: t.Optional(t.String({ description: '昵称' })),
      password: t.Optional(t.String({ description: '密码' })),
      role: t.Optional(t.String({ description: '用户角色：admin, guest' })),
      status: t.Optional(t.String({ description: '用户状态：active, inactive' }))
    })
  })
  
  // 删除用户
  .delete('/:id', deleteUser, {
    detail: {
      tags: ['Users'],
      summary: '删除用户',
      description: '删除指定用户（不能删除管理员用户）'
    },
    params: t.Object({
      id: t.String({ description: '用户ID' })
    })
  })
  
  // 切换用户状态
  .patch('/:id/toggle-status', toggleUserStatus, {
    detail: {
      tags: ['Users'],
      summary: '切换用户状态',
      description: '激活或禁用用户'
    },
    params: t.Object({
      id: t.String({ description: '用户ID' })
    })
  });